package org.jeecg.modules.message.wechat;

import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
import com.jeecg.dingtalk.api.user.vo.User;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import org.jeecg.config.init.WxMaConfiguration;
import org.jeecg.modules.customer.entity.BusCustomer;
import org.jeecg.modules.demo.points.entity.BusVipPointDetail;
import org.jeecg.modules.demo.shop.entity.VipShop;
import org.jeecg.modules.demo.shoprecord.entity.ShopRecord;
import org.jeecg.modules.demo.totalpoints.entity.BusVipPoint;
import org.jeecg.modules.order.entity.BusOrder;
import org.jeecg.modules.system.entity.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * 服务号推送消息服务
 */
@Service
public class FuWuHaoMessageService {


    /**
     * 微信公众号API的Service
     */
    @Autowired
    private WxMpService wxMpService;

    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");


    /**
     * 发送微信模板信息
     *
     * @return 是否推送成功
     */
    public Boolean SendNewOrderWxMsg(BusOrder busOrder) {
        //WHM LZJ   铂尚孙春晓-18863084126   S* CUI
        List<String> toUsers =
                Arrays.asList("o91YV6kNZFKnAH5onsNxAL8sDUkU",
                "o91YV6vj3BHE9SKgRHuA58xiKXi4",
                "o91YV6rO5kW-SRDeJImQxrPO4WG8",
                "o91YV6mG3GepButnIpsZdCYFdek4",
                "o91YV6loznlcRTSAxJNEuhUcsPI0",
                "o91YV6rSaPSp0Eb5pjF064Sd4GVk");
        // 发送模板消息接口

        for (String toUser : toUsers) {
            WxMpTemplateMessage.MiniProgram miniProgram = new WxMpTemplateMessage.MiniProgram();
            miniProgram.setAppid("wx7ac6ed39d0d2af6d");
            miniProgram.setPagePath("pages/order/orderDetail/orderDetail?id=" + busOrder.getId());
            WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
//              "o91YV6kNZFKnAH5onsNxAL8sDUkU" "o91YV6vj3BHE9SKgRHuA58xiKXi4" "o91YV6rO5kW-SRDeJImQxrPO4WG8" ,"o91YV6mG3GepButnIpsZdCYFdek4"  "o91YV6loznlcRTSAxJNEuhUcsPI0"
                    .toUser(toUser)
                    // 模板id
                    .templateId("zbKejRAKFxLCLohBvU4E1WWG1V8oSx35E5TkqM39oF4")
                    // 模板跳转链接
                    .miniProgram(miniProgram)
                    .build();
            // 添加模板数据
            templateMessage.addData(new WxMpTemplateData("first", busOrder.getCusKtz(), "#FF00FF"))
                    .addData(new WxMpTemplateData("keyword1", busOrder.getId(), "#A9A9A9"))
                    .addData(new WxMpTemplateData("keyword2", simpleDateFormat.format(busOrder.getCreateTime()), "#A9A9A9"))
//                .addData(new WxMpTemplateData("keyword3", "2021-07-25", "#000000"))
//                .addData(new WxMpTemplateData("keyword4", "栖霞路15号", "#000000"))
//                .addData(new WxMpTemplateData("keyword5", "5个序列", "#000000"))
//                .addData(new WxMpTemplateData("keyword6", "6个序列", "#000000"))
                    .addData(new WxMpTemplateData("remark", busOrder.getSampleNum() + "个序列,联系人:" + busOrder.getCusName() + ",联系电话:" + busOrder.getCusTel(), "#A9A9A9"));
            String msgId = null;
            try {
                // 发送模板消息
                msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
            } catch (WxErrorException e) {
                e.printStackTrace();
            }
        }

//        log.warn("·==++--·推送微信模板信息：{}·--++==·", msgId != null ? "成功" : "失败");
        return true;
    }


    /**
     * 发送微信模板信息
     *
     * @return 是否推送成功
     */
    public Boolean SendCusPointsExchangeWxMsg(ShopRecord shopRecord, VipShop vipShop, BusCustomer customer) {
        List<String> toUsers = Arrays.asList("o91YV6kNZFKnAH5onsNxAL8sDUkU",
                "o91YV6vj3BHE9SKgRHuA58xiKXi4",
                "o91YV6rO5kW-SRDeJImQxrPO4WG8",
                "o91YV6mG3GepButnIpsZdCYFdek4",
                "o91YV6loznlcRTSAxJNEuhUcsPI0");
        // 发送模板消息接口

        for (String toUser : toUsers) {
            WxMpTemplateMessage.MiniProgram miniProgram = new WxMpTemplateMessage.MiniProgram();
//            miniProgram.setAppid("wx7ac6ed39d0d2af6d");
//            miniProgram.setPagePath("pages/order/orderDetail/orderDetail?id=" + busOrder.getId());
            WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
//              "o91YV6kNZFKnAH5onsNxAL8sDUkU" "o91YV6vj3BHE9SKgRHuA58xiKXi4" "o91YV6rO5kW-SRDeJImQxrPO4WG8" ,"o91YV6mG3GepButnIpsZdCYFdek4"  "o91YV6loznlcRTSAxJNEuhUcsPI0"
                    .toUser(toUser)
                    // 模板id
                    .templateId("Ems_mmaUh7yuW_i82PSqtfAWETXqKL9cHKzbZjnx5cE")
                    // 模板跳转链接
                    .miniProgram(miniProgram)
                    .build();
            // 添加模板数据
            templateMessage.addData(new WxMpTemplateData("first", customer.getCusKtz(), "#FF00FF"))
                    .addData(new WxMpTemplateData("keyword1", shopRecord.getUserName(), "#A9A9A9"))
                    .addData(new WxMpTemplateData("keyword2", customer.getCusEmail()))
                    .addData(new WxMpTemplateData("keyword3", vipShop.getName()))
                    .addData(new WxMpTemplateData("keyword4", shopRecord.getComNum() + ""))
                    .addData(new WxMpTemplateData("keyword5", shopRecord.getPointsNum() + ""))
                    .addData(new WxMpTemplateData("remark", "联系电话:" + customer.getCusTel() + ",请尽快处理", "#A9A9A9"));
            String msgId = null;
            try {
                // 发送模板消息
                msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
            } catch (WxErrorException e) {
                e.printStackTrace();
            }
        }

//        log.warn("·==++--·推送微信模板信息：{}·--++==·", msgId != null ? "成功" : "失败");
        return true;
    }

    public List<SysUser> queryYunYingUer() {
        return null;
    }

    /**
     * 微信小程序推送订阅消息
     */
    public Object sendPointsMessage(String appId, String openId, BusVipPointDetail detail, BusVipPoint vipPoint) {

        WxMaSubscribeMessage subscribeMessage = new WxMaSubscribeMessage();

        //跳转小程序页面路径
        subscribeMessage.setPage("pages/index/index");
        //模板消息id
        subscribeMessage.setTemplateId("SluI_7F8P0epVm7HZ0xeocb1nC1u-ykoo6dwj22sH2Q");
        //给谁推送 用户的openid （可以调用根据code换openid接口)
        subscribeMessage.setToUser(openId);
//        WxMaSubscribeMessage.MsgData
        //==========================================创建一个参数集合========================================================
        ArrayList<WxMaSubscribeMessage.MsgData> wxMaSubscribeData = new ArrayList<>();

//        订阅消息参数值内容限制说明
//              ---摘自微信小程序官方：https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
//        参数类别 	参数说明 	参数值限制 	   说明
//        thing.DATA 	事物 	20个以内字符 	可汉字、数字、字母或符号组合
//        number.DATA 	数字 	32位以内数字 	只能数字，可带小数
//        letter.DATA 	字母 	32位以内字母 	只能字母
//        symbol.DATA 	符号 	5位以内符号 	只能符号
//        character_string.DATA 	字符串 	32位以内数字、字母或符号 	可数字、字母或符号组合
//        time.DATA 	时间 	24小时制时间格式（支持+年月日） 	例如：15:01，或：2019年10月1日 15:01
//        date.DATA 	日期 	年月日格式（支持+24小时制时间） 	例如：2019年10月1日，或：2019年10月1日 15:01
//        amount.DATA 	金额 	1个币种符号+10位以内纯数字，可带小数，结尾可带“元” 	可带小数
//        phone_number.DATA 	电话 	17位以内，数字、符号 	电话号码，例：+86-0766-66888866
//        car_number.DATA 	车牌 	8位以内，第一位与最后一位可为汉字，其余为字母或数字 	车牌号码：粤A8Z888挂
//        name.DATA 	姓名 	10个以内纯汉字或20个以内纯字母或符号 	中文名10个汉字内；纯英文名20个字母内；中文和字母混合按中文名算，10个字内
//        phrase.DATA 	汉字 	5个以内汉字 	5个以内纯汉字，例如：配送中

        //第一个内容： 奖品名称
        WxMaSubscribeMessage.MsgData wxMaSubscribeData1 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData1.setName("number1");
        wxMaSubscribeData1.setValue(detail.getAmount() + "");
        //每个参数 存放到大集合中
        wxMaSubscribeData.add(wxMaSubscribeData1);

        // 第二个内容：用户昵称
        WxMaSubscribeMessage.MsgData wxMaSubscribeData2 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData2.setName("number2");
        wxMaSubscribeData2.setValue(vipPoint.getPoints() + "");
        wxMaSubscribeData.add(wxMaSubscribeData2);

        // 第三个内容：领取方式
        WxMaSubscribeMessage.MsgData wxMaSubscribeData3 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData3.setName("time3");
        wxMaSubscribeData3.setValue(simpleDateFormat.format(new Date()));
        wxMaSubscribeData.add(wxMaSubscribeData3);

        // 第四个内容：专属老师
        WxMaSubscribeMessage.MsgData wxMaSubscribeData4 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData4.setName("thing4");
        wxMaSubscribeData4.setValue("订单积分变动");
        wxMaSubscribeData.add(wxMaSubscribeData4);

        // 第五个内容：温馨提醒
        WxMaSubscribeMessage.MsgData wxMaSubscribeData5 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData5.setName("thing5");
        wxMaSubscribeData5.setValue("青岛铂尚");
        wxMaSubscribeData.add(wxMaSubscribeData5);

        //把集合给大的data
        subscribeMessage.setData(wxMaSubscribeData);
        //=========================================封装参数集合完毕========================================================

        try {
            //获取微信小程序配置：
            final WxMaService wxService = WxMaConfiguration.getMaService(appId);
            //进行推送
            wxService.getMsgService().sendSubscribeMsg(subscribeMessage);
            return "推送成功";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "推送失败";
    }
}
